idea of statistical semantics_180415_22_11.html
NLP 의 기본 가정 가운데 하나인 "distributional hypothesis" 와 "Vector Space Models" 에 대해 알아보자.
위의 가정의 핵심은 ‘빈도’를 ‘의미’로 진화시킬 수 있다는 아이디어이다.
아울러 NLP 분야에서 생각하는 similarity 와 NLP의 기본 절차에 대해서도 이야기해보자.
이와 관련해 괜찮은 아티클이 있어 공부 겸 소개 겸 정리를 해볼까 한다.
http://www.jair.org/media/2934/live-2934-4846-jair.pdf
@
NLP의 기본 가정
VSMs:
문서 집합에 속하는 각각의 문서들을,
벡터공간의 벡터로 representation 할 수 있다.
벡터공간에 벡터로 표현된 문서들 사이의 거리가 가깝다면 semantically similar 하다.
distributional hypothesis:
비슷한 맥락에 등장하는 단어들은 유사한 의미를 지니는 경향이 있다.
(words that occur in similar contexts tend to have similar meanings)
statistical semantics hypothesis:
언어 사용의 통계적 패턴은 사람들이 의미하는 바를 이해하는 데 쓰일 수 있다.
(statistical patterns of human word usage can be used to figure out what people mean)
bag of words hypothesis:
어떤 문서에 출현한 단어들의 빈도는 문서와 쿼리의 관련성을 나타내는 경향이 있다.
(the frequencies of words in a document tend to indicate the relevance of the document to a query)
어떤 문서가 쿼리 문서와 유사한 벡터라면 그 의미도 비슷하다.
Latent relation hypothesis:
비슷한 패턴으로 동시에 등장하는 단어쌍은 유사한 의미적 관계를 지니는 경향이 있다.
(Pairs of words that co-occur in similar patterns tend to have similar semantic relations)
뭔가 어렵죠? 그 말이 그 말인 것 같고요.
위 내용을 종합해 저만의 언어로 풀어서 이야기하겠다.
분석 대상(말뭉치) 내 등장하는 단어들의 빈도를 세서 이를 벡터 형태로 바꿀 수 있다.
그 벡터들 간의 거리(유사도)를 잴 수 있다.
이렇게 구한 거리는 언어학적인 의미를 내포한다.
바꿔 말하면 컴퓨터는 그저 단어를 ‘숫자’로 바꿔서 ‘계산’할 뿐이다.
그러나, 이 과정에서 자연언어의 ‘의미’ 도 ‘이해’ 할 수 있다는 가정인 셈이다.
뒤에서 설명할 단어-문서행렬(Term-Document Matrix),
단어-문맥행렬(Word-Context Matrix),
페어-패턴행렬(Pair-Pattern Matrix) 등은 모두 위 가정을 전제로 한 분석 방법론이다.
Word2Vec, Glove, Fasttext 또한 마찬가지인 것 같다.
이들 방법론은 문맥 단어가 주어졌을 때 분석 대상 단어가 등장할 조건부 확률,
혹은 동시에 등장하는 빈도 따위를 보존하는 방식으로 단어를 벡터화하는 데,
이 방법론의 대전제가 위의 가정에서 크게 벗어난 것 같지는 않다는 생각에서이다.
어쨌든 단어의 의미를 숫자로,
언어학을 컴퓨터 사이언스로,
문제와 해결방식을 각각 근본적으로 바꿨다는 점에서 괜찮은 아이디어인 것 같다.
물론 이 가정이 틀렸다는 게 엄밀하게 증명되기 전까지.
@
단어-문서행렬
bag은 수학에서 set과 유사한 개념이다.
bag {a, a, b, c, c, c} 와 bag {c, a, c, b, a, c}는 같다.
즉, 빈도는 고려하지만 등장 순서는 무시한다.
이 때문에 단어-문서행렬을 bag of words 기반의 방법론이라고도 한다.
단어들을 일종의 bag 에 넣어 둔다는 의미로 해석할 수 있는다.
한번 주머니에 들어가면 순서가 뒤죽박죽 섞이기 때문에 이런 용어가 생긴 것 같다.
예를 들어 다음과 같은 단어들로 이뤄진 문장이 있다고 가정하자.
그럼 우리는 다음과 같은 단어-문서행렬을 만들 수 있다.
doc1: 나,는,학교,에,가,ㄴ,다
doc2: 학교,에,가,는,영희
doc3: 나,는,영희,는,좋,다
- doc1 doc2 doc3
나 1 0 0
는 1 1 2
학교 1 1 0
에 1 1 0
가 1 1 0
ㄴ 1 0 0
다 1 0 1
영희 0 1 1
가 0 0 0
좋 0 0 1
단어-문맥행렬
주변 단어를 몇 개 볼 지 (window size) 를 정한다.
그래서 동시에 등장하는 단어의 빈도수를 세어서 행렬로 바꾸는 방법이다.
window 개념이 있기 때문에 단어-문서행렬과 달리 단어 등장 순서를 약간 고려하긴 한다.
이 방법론은 distributional hypothesis 와 밀접한 관련이 있다.
예시는 다음과 같다(window size=1)
I enjoy flying
I like NLP
I like deep learning
- I like enjoy deep learing NLP flying
I 0 2 1 0 0 0 0
like 2 0 0 1 0 1 0
enjoy 1 0 0 0 0 0 0
deep 0 1 0 0 1 0 1
learning 0 0 0 1 0 0 0
NLP 0 1 0 0 0 0 0
flying 0 0 1 0 0 1 0
@
페어-패턴행렬
페어-패턴행렬의 행 벡터는 단어쌍(pairs of words)을 의미한다.
예컨대 mason:stone, carpenter:word 따위를 말한다.
단어쌍 (mason:stone) 에 대응되는 열 벡터는 해당 단어쌍과 함께 나타나는 패턴(patterns)을 뜻한다.
“X cuts Y”, “X works with Y” 등이다.
이 행렬을 제대로 구축해놓으면 특정 패턴(예컨대 X solves Y)와 비슷한 패턴(Y is solved by Y)을 가려낼 수 있다.
@
유사도?
‘단어 뜻이 비슷하다’ 는 어떤 의미를 지니는 걸까.
생각해보면 알쏭달쏭한 개념이다.
우선 지금 설명하고 있는 아티클을 기본으로 해서 이 주제에 관한 생각을 정리해 얘기해 보겠다.
단어들끼리는 어떤 관련을 맺고 있다.
엄밀히 얘기하면 관련이 존재할 뿐이지,
이 세상에 완벽한 동의어는 없다고 말할 수 있을 정도이다.
심지어 반의어 (antonyms) 들조차 단어 사이의 관련성이 높다.
‘춥다’와 ‘따뜻하다’는 반대되는 말이다.
그렇다면 이 둘은 관계가 전혀 없을까?
‘기온’을 언급한다는 점에 있어서는 비교적 강한 관계를 지닌다고 말할 수 있다.
‘흑’과 ‘백’, ‘크다’와 ‘작다’도 마찬가지로 ‘색상’, ‘크기’ 등과 관련해 관계를 맺고 있다.
지금 소개해드리고 있는 아티클은 단어 유사성과 관련해 다양한 개념들을 설명하고 있다.
우선 relational similarity 와 attributional similarity 가 있다.
’개:멍멍’ 은 relational similarity 의 사례이다.
‘개:늑대’ 는 attributional similarity 의 사례이다.
전자는 단어 사이의 ‘관계’에, 후자는 ‘속성’에 방점을 둔 유사성 개념이다.
유의어(synonyms), 부분어(meronyms), 반의어(antonyms) 등에서 알 수 있듯,
모든 단어는 서로 밀접한 관계를 맺고 있다.
NLP 분야에서는 상위어 (hypernym) 를 공유하는 단어들이,
의미적 유사성 (semantic simliarity) 을 지닌다고 정의한다.
이 기준에 따르면 ‘자동차’ 와 ‘자전거’ 는 의미가 비슷한 단어이다.
‘교통수단’이라는 상위어를 공유하기 때문이다.
이 의미적 유사성이라는 개념은 앞서 언급한 attributional simliarity 의 특수한 사례이다.
또한 ‘벌’과 ‘꿀’처럼 동시에 빈번하게 같이 등장하는 단어들은,
의미적으로 연관이 있을 가능성이 높다는 것이 이 분야의 대표적인 가정이다.